package cn.tedu.api;
/*本类用于测试字符串的拼接*/
public class TestString3 {

    static String string = "eye";
    public static void main(String[] args) {
        //需求:将26个字母拼接10000次
        String s = "abcdefghijklmnopqrstuvwxyz";//没有逻辑的外在形式,内部hidden/看不到的是,封装(private)
        //method1(s);//使用方案1拼接字符串
        method2(s);//使用方案2拼接字符串
        //method3(s); //main方法里面属性方法,可以直接循环往复的使用和调用,相互之间的要素

        /*long l1 = 234;
        long l11 = 234l;
        long l12 = 234L;

        double d =2.1;
        double d1 =2.1d;
        double d2 =2.1D;

        float f1 = 1.0f;
        float f11 = 1.0F;



        byte b = 2;
        byte b1 = 127;
        float f = 7;
        System.out.println(addition(b, f)); //b和f的生命周期都在main()的大括号的范围之内
        TestString3.addition(b, f);
        addition(b, f);
        System.out.println(TestString3.string);
        System.out.println(string);
        TestString3 testString3 = new TestString3(); //非静态方法需要必须使用对象调用,但是静态资源可以直接调用,或者通过类名调用
        testString3.addition1(3.9d, 7L);//避免传参字面值类型不对,可以先给参数定义赋值*/

    }

    /*private*/ static float addition(byte b, float s) {
        System.out.println(b + s);
        return b+s;
    }

    private double addition1(double b, long s) {  //随意给一个整数如100,可以直接匹配int或long, 但是无法默认匹配byte和short(需要单独定义赋值,传递一个有值有类型的参数)
        System.out.println(b + s);
        return b+s;
    }

    private static void method3(String s) { //传参不在乎静态资源或普通资源,任何资源都可以传递

        long startTime = System.currentTimeMillis();
        for (int i = 1; i < 10000; i++) {
            s = s.concat("abcdefghijklmnopqrstuvwxyz");
        }
        long endTime = System.currentTimeMillis();
        System.out.println(s);
        System.out.println(startTime); //currentTimeMillis()可以直接打印当前时间毫秒数
        System.out.println(endTime - startTime);
    }

    private static void method2(String s) {
//        String result = ""; //空串不需要,封装工具里面自动保存
        //1.创建工具类对象
//        StringBuffer sb = new StringBuffer();
        StringBuilder sb2 = new StringBuilder(); //高级字符串对象?!
        //5.给程序添加一个计时的功能
        //5.1获取循环开始时的系统当前时间,作为开始时间
        long t1 = System.currentTimeMillis();
        //2.拼接10000次
        for (int i = 0; i < 10000 ; i++) {
            //3.使用工具类对象的append()进行拼接
//            sb.append(s);//工具类的方法
            sb2.append(s);//封装字符串的默认拼接方法, ,,省略封装: 也就是空串String result = "";和字符拼接 result = result + s;
        }
        //5.2获取循环结束时的系统当前时间,作为结束时间
        long t2 = System.currentTimeMillis();
        //4.拼接完毕打印拼接的效果
//        System.out.println(sb); //直接打印工具类对象(记忆感知),打印地址值的toString已经重写了
        System.out.println(sb2); //已经重写了toString方法,直接打印sb2对象的字符串内容
        //5.3打印拼接总共耗费的毫秒值
        System.out.println(t2-t1);
    }

    private static void method1(String s) {//s是26字母
        //1.创建一个变量用来保存拼接后的效果
        String result = ""; //空串可以拼接
        //5.给程序添加一个计时的功能
        //5.1获取循环开始时的系统当前时间,作为开始时间
        long t1 = System.currentTimeMillis();
        //2.创建循环执行10000次
        for (int i = 0; i < 10000; i++) {
            //3.进行字符串的拼接
            result = result + s; //1)字符串可以通过+(算术运算符+)拼接; 2) 数字通过+(算术运算符+)count
            //for结构没有声明和定义result,而是通过就近原则,使用的method1的成员字符串类型变量,result
        }
        //5.2获取循环结束时的系统当前时间,作为结束时间
        long t2 = System.currentTimeMillis();
        //4.打印拼接好的效果
        System.out.println(result);
        //5.打印拼接总共耗费的毫秒值
        System.out.println(t2-t1);
    }

}









